<html>
<head><title>Flush Documentation: Message Types for Data and Membership Messages</title></head>

<body bgcolor="#FFFFFF">

<!--#include virtual="/includes/header-a" -->

<a href="http://www.cnds.jhu.edu/research/group/flush_spread">
<img src="flush_spread_title.gif" alt="FLUSH SPREAD" border=0>
</a>

<!--#include virtual="/includes/header-b" -->

<h2><em>Message Types for Data and Membership Messages</em></h2>

Flush Spread uses the same service and membership types as Spread. In addition to these
<a href="http://www.spread.org/docs/messages.html">common types</a>, Flush Spread also
adds the following service types:

<pre>
#define 	DONT_BLOCK
#define		FLUSH_REQ_MESS
#define		SUBGROUP_CAST
</pre>

<ol> 

<li><tt>DONT_BLOCK:</tt></p>

This service type can be requested when making a receive call. If the receive call would block while
receiving on the mailbox, the call will fail and return the error code <tt>WOULD_BLOCK</tt>.
Currently, Spread client libraries (v3.14 and earlier) do not support non-blocking receives. This
means that even if the caller sets the <tt>DONT_BLOCK</tt> service flag a call to receive may take
longer than would normally be expected of a non-blocking I/O call. However, the call should never
block permanently.</p>

<li><tt>FLUSH_REQ_MESS:</tt></p>

This message type can be set upon returning from a receive call. It indicates that the received
message was a flush request message for the group contained in sender. A flush request message is
generated by Flush Spread when the underlying membership of that group changes. To install the new
membership and make progress, the receiver must eventually respond to this signal by flushing that
group by calling <a href="FL_flush.html">FL_flush</a>. Receiving a flush request message is an
important part of the view synchrony GCS semantics and has pretty drastic importance. See <a
href="FL_receive.html">FL_receive</a> for a full description of the restrictions incurred by and
ramifications of receiving a flush request. Note that a flush request is neither a membership message
nor a regular message. See the <a href="access.html">message type access functions</a> for a macro to
test if a message is a flush request message.</p>

<li><tt>SUBGROUP_CAST:</tt></p>

This message type can be set upon returning from a receive call. It indicates that the
received message was only multicasted to a subset of a group. This message was only sent
to the members in the groups array in the range [0, *num_groups-1). The group that this
subgroup-multicast occurred in is contained in groups[*num_groups-1].</p>

</ol>

<!--#include virtual="/includes/footer" -->

</body></html>
